/* 
 * File:   LecteurFonction.h
 * Author: doud
 *
 * Created on 4 janvier 2012, 15:50
 */

#ifndef LECTEURFONCTION_H
#define	LECTEURFONCTION_H

#include "LecteurSymbole.h"
#include "TableSymboles.h"

class LecteurFonction {
public:
    LecteurFonction(LecteurSymbole & ls);
    // Construit un lecteur de fonction pour analyser une déclaration de fonction
    // et bâtir les représentations nécessaires à son exécution.
    // ls référence un lecteur de symbole dont le symbole courant est
    // le 1er symbole de la déclaration.
    // Après l'analyse, le symbole courant sera le premier symbole qui suit la déclaration.
   // int getValeur(Pile<int> & p);
    // évalue la fonction avec les valeurs de paramètres effectifs contenus dans la Pile p
    // Si p ne contient pas nbParam valeurs, message d'erreur et fin du programme !

    inline int operator ==(string ch) {
        return nom == ch;
    } // renvoie vrai si nom=ch

    ////////////////////////////////////////////////////////////////////////////////
private:
    LecteurSymbole &ls; // pointeur sur le lecteur de symboles utilisé pour analyser la fonction
    TableSymboles ts; // la table des symboles valués de la fonction
    Noeud* arbre; // l'arbre abstrait
    string nom; // le nom (l'identificateur) de la fonction
    unsigned short nbParam;
    // le nombre de paramètres de la fonction
    // implémentation de la grammaire d'une déclaration de fonction
    Noeud* declFonction(); // <decl_fonction> ::= fonction <variable> (<variable>{,<variable>}) = <expression>
    Noeud* expression(); //<expression> :: = <facteur>{<op_binaire> <facteur>}
    Noeud* facteur(); // <facteur> :: = <entier> | <variable> | (<expression>)
    // et les outils habituels : sauterSymcour, testerSymcour, ...
};

#endif	/* LECTEURFONCTION_H */

